def id 6395
def status 53
def tstatus 54
def ally 1
def veggie 2
def enemy 3
def rrr 942

def speed 10

'****************************Birth init**************************
cond
*.robage 0 =
start
  .dnalen .memloc store
  .dnalen .tmemloc store
  100 rnd .rrr store
stop
'****************************************************************

'*******************Const****************************************
cond
start
'Unfix myself
  0 .fixpos *.fixed sgn mult store
'Identify myself
  .id dup *.out5 sub sgn abs .out5 mult store
'arrange my eyes
  -140 dup *.eye1dir sub sgn abs .eye1dir mult store
  -105 dup *.eye2dir sub sgn abs .eye2dir mult store
  -70  dup *.eye3dir sub sgn abs .eye3dir mult store
  -35  dup *.eye4dir sub sgn abs .eye4dir mult store
  35   dup *.eye6dir sub sgn abs .eye6dir mult store
  70   dup *.eye7dir sub sgn abs .eye7dir mult store
  105  dup *.eye8dir sub sgn abs .eye8dir mult store
  140  dup *.eye9dir sub sgn abs .eye9dir mult store
  -30  dup *.eye1width sub sgn abs .eye1width mult store
  -25  dup *.eye2width sub sgn abs .eye2width mult store
  -15  dup *.eye3width sub sgn abs .eye3width mult store
  5    dup *.eye4width sub sgn abs .eye4width mult store
  45   dup *.eye5width sub sgn abs .eye5width mult store
  125  dup *.eye6width sub sgn abs .eye6width mult store
  285  dup *.eye7width sub sgn abs .eye7width mult store
  605  dup *.eye8width sub sgn abs .eye8width mult store
  1221 dup *.eye9width sub sgn abs .eye9width mult store
  .deltie *.tienum sgn mult inc
stop
'****************************************************************

'************************Eye focus manager***********************
cond
  *.eye1 0 >
  *.eye2 0 > or
  *.eye3 0 > or
  *.eye4 0 > or
  *.eye5 0 > or
  *.eye6 0 > or
  *.eye7 0 > or
  *.eye8 0 > or
  *.eye9 0 > or
start
'Focus using the narrowest eye that sees something
  *.eye1 *.eye2 *.eye3 *.eye4
  *.eye5 *.eye6 *.eye7 *.eye8 *.eye9
  floor floor floor floor
  floor floor floor floor
  50 store
  -4 *50 *.eye1 sub sgn abs -- - .focuseye mult store
  -3 *50 *.eye2 sub sgn abs -- - .focuseye mult store
  -2 *50 *.eye3 sub sgn abs -- - .focuseye mult store
  -1 *50 *.eye4 sub sgn abs -- - .focuseye mult store
  0  *50 *.eye5 sub sgn abs -- - .focuseye mult store
  1  *50 *.eye6 sub sgn abs -- - .focuseye mult store
  2  *50 *.eye7 sub sgn abs -- - .focuseye mult store
  3  *50 *.eye8 sub sgn abs -- - .focuseye mult store
  4  *50 *.eye9 sub sgn abs -- - .focuseye mult store
stop
'****************************************************************

'****************************Tie manager*************************
cond
  *.numties 0 >
start
'We will need this later :D
  *.tiepres .tienum store
  *.tiepres .readtie store
stop
'****************************************************************

'****************************Target ID***************************
cond
'I see something..   what is it?
  *.eyef 0 >
start
'Oh, you. Hi again, I guess.
  .ally
    *.in5 .id sub sgn abs -- -
    *.refage sgn -- - add sgn mult
    *.memval *.dnalen sub sgn abs -- - mult
  .status store

'Its a veggie! Let's eat it!
  .veggie .status
    *.status .ally sub sgn abs mult
    *.refshoot sgn -- - mult
    *.refaimsx sgn -- - mult
    *.refkills sgn -- - mult
    *.refeye sgn -- - mult
    *.refup sgn -- - mult
    *.memval 13 sub sgn abs -- - mult
  store

'You're not my race and you're not food.. you must be trying to kill me!
  .enemy .status
    *.status .ally sub sgn abs mult
    *.status .veggie sub sgn abs mult
  store
stop
cond
'I'm attached to something..   what is it?
  *.tienum 0 >
start
'Oh, you. Hi again, I guess.
  .ally
    *.tmemval *.dnalen sub sgn abs -- -
    *.trefage sgn -- - add sgn mult
  .tstatus store

'Its a veggie! Let's eat it!
  .veggie .tstatus
    *.tstatus .ally sub sgn abs mult
    *.trefshoot sgn -- - mult
    *.trefaimsx sgn -- - mult
    *.trefkills sgn -- - mult
    *.trefeye sgn -- - mult
    *.trefup sgn -- - mult
    *.tmemval 13 sub sgn abs -- - mult
  store

'You're not my race and you're not food.. you must be trying to kill me!
  .enemy .tstatus
    *.tstatus .ally sub sgn abs mult
    *.tstatus .veggie sub sgn abs mult
  store
stop
'****************************************************************

'**************************Untie allies**************************
cond
  *.numties 0 >
  *.tstatus .ally =
start
  *.tiepres .deltie store
stop
'****************************************************************

'****************************Seeking*****************************
cond
  *.eye1 0 =
  *.eye2 0 =
  *.eye3 0 =
  *.eye4 0 =
  *.eye5 0 =
  *.eye6 0 =
  *.eye7 0 =
  *.eye8 0 =
  *.eye9 0 =
start
'We clearly aren't looking hard enough
  .speed .up store
stop
'****************************************************************

'*******************Aim in direction of movement*****************
cond
  *.velup 0 !=
  *.veldx 0 !=
  *.eyef 0 =
  *.numties 0 =
  *.status .ally = or
start
'theta = arctan (veldx / velup). (math ftw)
  *.veldx 628 mult *.velup div *.veldx *.velup div dup mult 8824 mult 31416 add 10000 div
  div - *.velup sgn sqr -- - 628 mult add *.aim add .setaim store
stop
cond
  *.velup 0 =
  *.veldx 0 !=
  *.eyef 0 =
  *.numties 0 =
  *.status .ally = or
start
'divide by zero (eek!)
  *.velsx sgn 314 mult *.aim add .setaim store
stop
'****************************************************************

'***********************Target non-allies************************
cond
  *.eyef 0 >
  *.status .ally !=
start
'"children, scooch closer"
  *.refvelup 250 *.eye3 sub add *.velup abs - floor .up store
  *.refveldx .dx store  *.refveldx .dx store
  *.refxpos *.refypos angle .setaim store
stop

'****************************************************************

'************************Avoid allies****************************
cond
  *.eyef 0 >
  *.status .ally =
start
'root 2 = 14142 10000 div
'Yo. How's it going? Good? Me too. See ya.
  *.tiepres .deltie store
  *.refveldx sgn abs -- - *.refveldx add sgn .speed mult - 14142 mult 20000 div  .dx store
  .speed 14142 mult 20000 div .up store
stop

'****************************************************************

'***********************EAT YOUR VEGGIES!!***********************
cond
  *.eyef 0 >
  *.status .veggie =
  *.numties 0 =
start
  *.memval .tie store
stop
cond
  *.eyef 0 >
  *.status .veggie =
start
  .tieloc *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult
  .tienum *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add
  .shoot store

   -1 *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult
   1  *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add
  .shootval store
stop
cond
  *.numties 0 >
  *.tstatus .veggie =
start
  .tieval .tieloc store
   30000 .tieval store

stop
'****************************************************************

'*********This section is dedicated to killin'*******************
'This section is also a pain to comment,
'but I'm sure you can figure it out if you're interested
cond
  *.eyef 0 >
  *.numties 0 =
  *.status .enemy =
start
  1000 rnd .tie store
  .shootval  *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult
  .strpoison *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add
  .strvenom  *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult add
  .fixpos    *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add
  .shoot store
  32000 .shootval store
stop
cond
  *.eyef 0 >
  *.numties 0 >
  *.status .enemy =
  *.trefbody 50 >
start
  .tieloc *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult
  .tienum *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add
  .shoot store
  -1 *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult
  1  *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add
  .shootval store
stop
cond
  *.eyef 0 >
  *.numties 0 >
  *.status .enemy =
  *.trefbody 50 <=
start
  .shootval  *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult
  .strbody   *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add
  .strpoison *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult add
  .strvenom  *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add
  .shoot store
  32000 .shootval store
stop
cond
  *.numties 0 >
  *.tstatus .enemy =
  *.trefbody 50 >
start
  .strbody *.robage *.rrr add 2 mod 0 sub sgn abs -- - mult
  .tieval  *.robage *.rrr add 2 mod 1 sub sgn abs -- - mult add
  .tieloc store
  32000 .tieval store
stop
cond
  *.numties 0 >
  *.status .enemy =
  *.trefbody 50 <=
start
  .shootval  *.robage *.rrr add 4 mod 2 sub sgn abs -- - mult
  .fdbody    *.robage *.rrr add 4 mod 3 sub sgn abs -- - mult add
  .strpoison *.robage *.rrr add 4 mod 0 sub sgn abs -- - mult add
  .strvenom  *.robage *.rrr add 4 mod 1 sub sgn abs -- - mult add
  .tieloc store
  32000 .tieval store
stop
'****************************************************************

'**************************Waste & body**************************
cond
  *.waste 400 >
start
  -4 .shoot store
  *.waste .shootval store
stop
cond
  *.body 2 >=
start
  *.body .fdbody store
stop
'****************************************************************

'*****************************Repro******************************
cond
  *.nrg *.body 10 mult add 600 >
start
'Face the direction opposite to velocity
  *.veldx 628 mult *.velup div *.veldx *.velup div dup mult 8824 mult 31416 add 10000 div
  div - *.velup sgn sqr -- 628 mult add *.aim add .setaim store
'Accelerate with current velocity
  80 *.velscalar sub 0 floor .dn store
  50 .repro store
stop